package com.example.fresh_fruit.util;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.example.fresh_fruit.entity.Customer;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @author :飞天の鱼
 * @date : 2022/8/19 15:54
 */
public class TokenUtil0 {
    /**
     * 过期时间为一个小时
     */
    private static final long EXPIRE_TIME =  60 * 60 * 1000;

    /**
     * token私钥  这里的密码随便写就可以
     */
    private static final String TOKEN_SECRET = "adm2345dfin234sdsdff";

    /**
     这里的参数根据你的需要来，因为我没有实体类，所以我在登录接口中写的假数据，这里你如果有实体类
     的话你可以传一个User user
     */
    public static String createToken(Customer customer) {
        String token = null;
        Date expiration = new Date(System.currentTimeMillis() + EXPIRE_TIME);
        Map<String,Object> header = new HashMap<>();
        header.put("typ","JWT");
        header.put("alg","HS256");
        token = JWT.create()
                .withIssuer("auth0")
                .withHeader(header)
                //这个地方是你传的参数
                .withClaim("username",customer.getName())
                .withClaim("password",customer.getPasswd())
                .withExpiresAt(expiration)
                .sign(Algorithm.HMAC256(TOKEN_SECRET));
        return token;
    }

    public static boolean verify(String token) {
        try {
            JWTVerifier verifier = JWT.require(Algorithm.HMAC256(TOKEN_SECRET)).withIssuer("auth0").build();
            DecodedJWT jwt = verifier.verify(token);
            System.out.println("认证通过：");
            System.out.println("过期时间：" + jwt.getExpiresAt());
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Token认证失败，需要重新登录！");
        }
        return false;
    }

}
